#include <stdio.h>



// int get_judge_triangle(int a,int b,int c)
// {
//     int sum;
//     printf("请输入三角形三条边的边长：\n");
//     scanf("%d %d %d",&a,&b,&c);
//     sum = a+b+c;
//     if(a+c>b && a+b>c && c+b>a)
//     {
//         return 1;
//     }
//     else
//     {
//         return 0;
//     }
// }

// int main()
// {   
//     int a,b,c;
//     int flag;
//     flag = get_judge_triangle(a,b,c);
//     printf("%d\n",flag);
//     printf("%d\n",sum);
// }


// void jiaohuan(int a,int b)
// {
//     int temp;
//     a = temp;
//     a = b;
//     b = temp;
// }

// int main()
// {
//     int a,b;
//     scanf("%d %d",&a,&b);
//     jiaohuan(a,b);
//     printf("%d %d\n",a,b);
// }




// int array_sum(int num,int array[]);

// int main()
// {
//     int a[5] = {1,2,3,4,5};
//     int b[3] = {10,20,30};
    


//     printf("该数组的元素和为:%d",array_sum(5,a));
//     printf("该数组的元素和为:%d",array_sum(3,b));
// }

// int array_sum(int num,int array[])
// {
//     int sum;
//     for(int i=0;i<num;i++)
//     {
//         sum = sum + array[i];
//     }
    
// }



//判断数组的排序问题
// int get_array(int i,int array[]);

// int main()
// {
//     int a[3];
//     int i;
//     for(i=0;i<3;i++)
//     {
//         scanf("%d",&a[i]);
//     }
    
//     get_array(3,a); 
//     return 0;
// }


// int get_array(int k,int array[])
// {
//     #define N 3
//     int j;
//     int m = 0,l =0;
//     for(j=0;j<N-1;j++)
//     {
//         if(array[j]<array[j+1])
//         {
//             m++;
//         }
//     }
//     for(j=0;j<N-1;j++)
//     {
//         if(array[j]>array[j+1])
//         {
//             l++;
//         }
//     }
//     if(m == N-1)
//     {
//         printf("该数组的元素是升序排列的\n");
//         return 0;
//     }
//     if(l == N-1)
//     {
//         printf("该数组的元素是降序排列的\n");
//         return 0;
//     }
//     if(m < (N-2) || l < (N-2))
//     {
//         printf("该数组的元素是无序排列的\n");
//         return 0;
//     }
    
// }


void get_two_array(int n,int m,int array[n][m])
{
    #define N 3
    #define M 3
    int a[N][M];
    int i,j;
    for(i=0; i<N; i++)
    {
        for(j=0; j<M; j++)
        {
            scanf("%d",&a[i][j]);
            getchar();
        }
    }
    int max_index = a[0][0];
    int b[M];
    
    for(i=0; i<N; i++)
    {
        for(j=0; j<M; j++)
        {
            if(a[i][j] > max_index)
            {
                max_index = a[i][j];
                b[i] = j;
            }
        }
        max_index = a[i+1][0];
    }

    int max = a[0][b[0]];
    
    for(i=0; i<N; i++)
    {
        if(a[i][b[i]] > max )
        {
            max = a[i][b[i]];
        }
        
    }
    printf("该二维数组的最大值为:%d\n",max);

}


int main()
{
    int a[N][M];
    get_two_array(N,M,a);
    return 0;
}








//判断整形2进制形式有几个1

// int get_erjinzhi(int nom)
// {

//     int i;
//     int m=0;
//     for(i=0;i<32;i++)
//     {
//         if(nom & 1)
//         {
//             m++;
//         }
//         nom >>= 1;
//     }
//     return m;
    
// }

// int main()
// {
//     int a;
//     printf("请随机输入一个整数：");
//     scanf("%d",&a);
//     printf("%d\n",get_erjinzhi(a));
//     return 0;
// }


